package com.cskaoyan.javase.oop1._12block._2static._0introduction;
/**
 * 静态代码块
 * 什么是静态代码块？
 * 定义在类的成员位置，使用以下声明方式声明的代码块，称之为静态代码块
 * //成员位置
 * statics{
 *   // 局部位置
 * }
 * //成员位置
 * 就相当于把构造代码块多加一个static关键字修饰
 *
 * 静态代码块的作用:
 * 在类加载的过程中被执行,用于给静态成员变量赋值
 *
 * 总结一下,目前为止,在类加载过程中,给静态成员变量赋值的手段:
 *      1.默认初始化,具有默认值
 *      2.显式赋值
 *      3.静态代码块赋值
 * 很明显,默认初始化永远最先执行,显式赋值和静态代码块赋值,按照代码的书写顺序从上往下执行.
 * 静态代码块的原理: 依赖于Java类加载的机制来完成,后面再详谈.
 *
 * 除了上述类加载过程中的赋值手段以外,所有在new对象过程中执行的结构,都可以给静态成员变量赋值,包括:
 *      1.构造器
 *      2.构造代码块
 * 类加载在前,new对象在后,而且一般来说静态成员变量的赋值不会依赖于new对象
 *
 *
 *
 *
 * @since 09:56
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        System.out.println(A.num);
    }
}
class A{


    static int num = 777;

    // 静态代码块
    static {
        num = 888;
    }

}